import pandas as pd
import os
from openai import OpenAI
import time
import requests
from tqdm import tqdm  # 导入 tqdm 库
import random

base_url = "https://api.chatanywhere.tech"  # 设置ChatAnywhere的API端点

# 扩展的提示词列表
# 扩展的提示词列表
prompts = [
    "请生成一段关于学习方法的中文段落，字数约300字。",
    "谈谈个人成长的重要性，字数约300字。",
    "描述一个成功的学习案例，字数约300字。",
    "讨论职业发展的关键因素，字数约300字。",
    "分享一个关于自我提升的故事，字数约300字。",
    "请生成一段关于团队合作的中文段落，字数约300字。",
    "谈谈如何有效管理时间，字数约300字。",
    "描述一个影响深远的教育理念，字数约300字。",
    "讨论在线学习的优势与挑战，字数约300字。",
    "分享一个关于教育改革的观点，字数约300字。",
    "谈谈心理健康在学习中的重要性，字数约300字。",
    "描述一个成功的教育项目，字数约300字。",
    "讨论如何激励学生的学习兴趣，字数约300字。",
    "分享一个关于跨文化交流的故事，字数约300字。",
    "谈谈教育技术对学习的影响，字数约300字。",
    "描述一个影响你学习的老师，字数约300字。",
    "讨论如何培养批判性思维能力，字数约300字。",
    "分享一个关于志愿服务的经历，字数约300字。",
    "谈谈家庭教育对孩子成长的影响，字数约300字。",
    "描述一个你认为重要的教育理念，字数约300字。",
    "请生成一段关于学习动机的中文段落，字数约300字。",
    "讨论如何在学习中克服困难，字数约300字。",
    "分享一个关于教育公平的观点，字数约300字。",
    "谈谈如何培养学生的创造力，字数约300字。",
    "描述一个成功的教育创新案例，字数约300字。",
    "讨论如何利用科技提升学习效果，字数约300字。",
    "分享一个关于终身学习的故事，字数约300字。",
    "谈谈如何在学习中保持积极心态，字数约300字。",
    "描述一个影响你职业选择的教育经历，字数约300字。",
    "讨论如何在教育中实现个性化学习，字数约300字。",
    "分享一个关于教育与社会发展的关系的观点，字数约300字。",
    "谈谈如何通过阅读提升自我，字数约300字。",
    "描述一个成功的团队合作项目，字数约300字。",
    "讨论如何在学习中培养自律能力，字数约300字。",
    "分享一个关于教育政策的故事，字数约300字。",
    "谈谈如何利用网络资源进行学习，字数约300字。",
    "描述一个影响你学习态度的事件，字数约300字。",
    "讨论如何在教育中促进学生的社会责任感，字数约300字。",
    "分享一个关于教育与文化传承的观点，字数约300字。",
    "谈谈如何在学习中建立良好的人际关系，字数约300字。",
    "描述一个成功的教育合作项目，字数约300字。",
    "讨论如何在教育中培养学生的批判性思维，字数约300字。",
    "分享一个关于教育与心理健康的故事，字数约300字。",
    "谈谈如何在学习中保持好奇心，字数约300字。",
    "描述一个影响你学习方法的老师，字数约300字。",
    "讨论如何在教育中实现多样性和包容性，字数约300字。",
    "分享一个关于教育与经济发展的关系的观点，字数约300字。",
    "谈谈如何在学习中利用反馈提升自我，字数约300字。",
    "描述一个成功的教育交流项目，字数约300字。",
    "讨论如何在教育中培养学生的领导能力，字数约300字。",
    "分享一个关于教育与科技融合的故事，字数约300字。",
    "谈谈如何在学习中克服拖延症，字数约300字。",
    "描述一个影响你学习动力的事件，字数约300字。",
    "讨论如何在教育中促进学生的创新能力，字数约300字。",
    "分享一个关于教育与环境保护的观点，字数约300字。",
    "谈谈如何在学习中建立良好的学习习惯，字数约300字。",
    "描述一个成功的教育项目对社区的影响，字数约300字。",
    "讨论如何在教育中培养学生的情商，字数约300字。",
    "分享一个关于教育与社会变革的故事，字数约300字。",
    "谈谈如何在学习中利用小组讨论提升理解，字数约300字。",
    "描述一个影响你学习目标的老师，字数约300字。",
    "讨论如何在教育中实现可持续发展，字数约300字。",
    "分享一个关于教育与艺术的关系的观点，字数约300字。",
    "谈谈如何在学习中保持专注，字数约300字。",
    "描述一个成功的教育项目如何改变了学生的生活，字数约300字。",
    "讨论如何在教育中培养学生的适应能力，字数约300字。",
    "分享一个关于教育与科技发展的故事，字数约300字。",
    "谈谈如何在学习中利用时间管理提升效率，字数约300字。",
    "描述一个影响你学习方式的事件，字数约300字。",
    "讨论如何在教育中促进学生的自我反思，字数约300字。",
    "分享一个关于教育与心理发展的观点，字数约300字。",
    "谈谈如何在学习中利用游戏化提升兴趣，字数约300字。",
    "描述一个成功的教育项目如何促进了社区发展，字数约300字。",
    "讨论如何在教育中培养学生的全球视野，字数约300字。",
    "分享一个关于教育与人权的故事，字数约300字。",
    "谈谈如何在学习中利用视觉化工具提升理解，字数约300字。",
    "描述一个影响你学习信念的老师，字数约300字。",
    "讨论如何在教育中实现性别平等，字数约300字。",
    "分享一个关于教育与社会责任的观点，字数约300字。",
    "谈谈如何在学习中利用反思提升自我，字数约300字。",
    "描述一个成功的教育项目如何促进了文化交流，字数约300字。",
    "讨论如何在教育中培养学生的道德观，字数约300字。",
    "分享一个关于教育与科技创新的故事，字数约300字。",
    "谈谈如何在学习中利用多媒体资源提升效果，字数约300字。",
    "描述一个影响你学习态度的事件，字数约300字。",
    "讨论如何在教育中促进学生的批判性思维，字数约300字。",
    "分享一个关于教育与社会公正的观点，字数约300字。",
    "谈谈如何在学习中利用合作学习提升效果，字数约300字。",
    "描述一个成功的教育项目如何改变了学生的未来，字数约300字。",
    "讨论如何在教育中培养学生的自我管理能力，字数约300字。",
    "分享一个关于教育与心理健康的故事，字数约300字。",
    "谈谈如何在学习中利用技术提升学习体验，字数约300字。",
    "描述一个影响你学习方法的事件，字数约300字。",
    "讨论如何在教育中实现公平与正义，字数约300字。",
    "分享一个关于教育与文化多样性的观点，字数约300字。",
    "谈谈如何在学习中利用社交媒体提升学习效果，字数约300字。",
    "描述一个成功的教育项目如何促进了社会和谐，字数约300字。",
    "讨论如何在教育中培养学生的社会责任感，字数约300字。",
    "分享一个关于教育与经济发展的故事，字数约300字。",
    "谈谈如何在学习中利用反馈提升自我，字数约300字。",
    "描述一个影响你学习动力的老师，字数约300字。",
    "讨论如何在教育中促进学生的创新能力，字数约300字。",
    "分享一个关于教育与环境保护的观点，字数约300字。",
    "谈谈如何在学习中建立良好的学习习惯，字数约300字。",
    "描述一个成功的教育项目对社区的影响，字数约300字。",
    "讨论如何在教育中培养学生的情商，字数约300字。",
    "分享一个关于教育与社会变革的故事，字数约300字。",
    "谈谈如何在学习中利用小组讨论提升理解，字数约300字。",
    "描述一个影响你学习目标的老师，字数约300字。",
    "讨论如何在教育中实现可持续发展，字数约300字。",
    "分享一个关于教育与艺术的关系的观点，字数约300字。",
    "谈谈如何在学习中保持专注，字数约300字。",
    "描述一个成功的教育项目如何改变了学生的生活，字数约300字。",
    "讨论如何在教育中培养学生的适应能力，字数约300字。",
    "分享一个关于教育与科技发展的故事，字数约300字。",
    "谈谈如何在学习中利用时间管理提升效率，字数约300字。",
    "描述一个影响你学习方式的事件，字数约300字。",
    "讨论如何在教育中促进学生的自我反思，字数约300字。",
    "分享一个关于教育与心理发展的观点，字数约300字。",
    "谈谈如何在学习中利用游戏化提升兴趣，字数约300字。",
    "描述一个成功的教育项目如何促进了社区发展，字数约300字。",
    "讨论如何在教育中培养学生的全球视野，字数约300字。",
    "分享一个关于教育与人权的故事，字数约300字。",
    "谈谈如何在学习中利用视觉化工具提升理解，字数约300字。",
    "描述一个影响你学习信念的老师，字数约300字。",
    "讨论如何在教育中实现性别平等，字数约300字。",
    "分享一个关于教育与社会责任的观点，字数约300字。",
    ]

def save_to_excel(data, filename, max_rows=1000000):
    """将数据分批保存到多个Excel文件"""
    if not data:
        return
    
    # 创建输出目录
    os.makedirs('output3', exist_ok=True)
    
    # 计算需要多少个文件
    total_chunks = (len(data) + max_rows - 1) // max_rows
    
    for i in range(total_chunks):
        start_idx = i * max_rows
        end_idx = min((i + 1) * max_rows, len(data))
        chunk_data = data[start_idx:end_idx]
        
        # 生成文件名
        if total_chunks > 1:
            chunk_filename = f'output3/{filename}_{i+1}.xlsx'
        else:
            chunk_filename = f'output3/{filename}.xlsx'
        
        # 保存数据
        df = pd.DataFrame(chunk_data)
        df.to_excel(chunk_filename, index=False)
        print(f"保存数据到 {chunk_filename}, 共 {len(chunk_data)} 条")

def generate_or_translate_text(client, prompt: str, is_translation=False) -> str:
    """生成或翻译文本"""
    if is_translation:
        prompt = f"请将以下中文翻译成英文:\n{prompt}"
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.9,  # 增加温度以提高多样性
        max_tokens=400
    )
    return response.choices[0].message.content.strip()

def create_dataset(api_key: str, output_file: str, num_paragraphs: int = 500):
    """生成数据集并保存到Excel文件"""
    client = OpenAI(api_key=api_key, base_url=base_url)
    
    data = []  # 确保在这里初始化 data 列表
    
    # 使用 tqdm 显示进度条
    for _ in tqdm(range(num_paragraphs), desc="生成段落进度"):
        try:
            # 随机选择一个提示词
            prompt = random.choice(prompts)
            # 添加一些随机上下文
            additional_context = random.choice([
                "请结合个人经历，",
                "考虑到当前的社会背景，",
                "从历史的角度来看，"
            ])
            full_prompt = additional_context + prompt
            
            # 生成中文段落
            original_text = generate_or_translate_text(client, full_prompt)
            # 翻译为英文
            translated_text = generate_or_translate_text(client, original_text, is_translation=True)
            # 添加到数据列表
            data.append({"指令": "将教育相关的中文翻译为英语", "原文": original_text, "译文": translated_text})
            time.sleep(2)  # 添加延迟以避免频率限制
        except Exception as e:
            print(f"生成或翻译时出错: {e}")
    
    # 保存到Excel文件
    df = pd.DataFrame(data)
    df.to_excel(output_file, index=False)
    print(f"数据集已保存至 {output_file}")
    
    return data  # 返回生成的数据

def fetch_data(endpoint):
    url = f"{base_url}/{endpoint}"  # 使用 base_url 变量构建完整的 API URL
    response = requests.get(url)  # 发送 GET 请求
    return response.json()  # 返回 JSON 格式的响应

def call_ai_model(data):
    url = f"{base_url}/ai/model"  # 使用 base_url 变量构建 AI 模型的 API URL
    headers = {
        "Content-Type": "application/json",
        "Authorization": "Bearer sk-8r4yikeXCMIrSdq01K2bKCnKjrbAk97NY2bJPAhfnyjXXeFK"  # 添加 API 密钥
    }
    response = requests.post(url, json=data, headers=headers)  # 发送 POST 请求
    return response.json()  # 返回 JSON 格式的响应

def main():
    # 初始化 OpenAI 客户端
    client = OpenAI(api_key='sk-PEvjpQELoLDQqNX75f8c457d2cC244E4846a4c13C497Fd73')  #API key
    
    # 生成数据
    print("开始生成教育相关内容...")
    API_KEY = "sk-8r4yikeXCMIrSdq01K2bKCnKjrbAk97NY2bJPAhfnyjXXeFK"
    OUTPUT_FILE = "教育段落数据集.xlsx"
    
    data = create_dataset(API_KEY, OUTPUT_FILE, num_paragraphs=560)  # 生成num_paragraphs个段落
    
    # 保存数据
    if data:
        save_to_excel(data, 'education_dataset')
        print("\n所有数据已保存到 output3 目录")
    else:
        print("未生成任何数据")

if __name__ == "__main__":
    main()